package my.study.java.util.HashMap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Fail_Fast {

	/**
	 * 
	 * 如果在利用迭代器对map进行遍历时，需要对map进行添加或者删除操作，会促发fail fast机制，抛出ConcurrentModificationException
	 * 
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		fail_fast1();
		fail_fast2();	
	}
	
	/**
	 * 如果在利用迭代器对map进行遍历时，需要对map进行添加或者删除操作，会促发fail fast机制，抛出ConcurrentModificationException
	 * 可以利用key的迭代器进行删除，这样不会促发fail fast机制
	 */
	public static void fail_fast1() {
		Map<Integer, String> map = new HashMap<Integer, String>();
		init(map);
		Iterator<Integer> keys = map.keySet().iterator();
        while(keys.hasNext()){
            Integer i = keys.next();
            if(map.containsKey(i)){
                keys.remove(); 
                //map.remove(i);
            }
        }
        System.out.println(map);
        
	}

	/**
	 * 如果在利用迭代器对map进行遍历时，需要对map进行添加或者删除操作，会促发fail fast机制，抛出ConcurrentModificationException
	 */
	public static void fail_fast2() {
		Map<Integer, String> map = new HashMap<Integer, String>();
		init(map);
		for (Map.Entry<Integer, String> entry : map.entrySet()) {
			System.out.println(entry.getKey() + " : " + entry.getValue());
			//map.put(11, "id " + 11);
		}
        System.out.println(map);
        
	}
	public static void init(Map<Integer, String> map) {
		for (int i = 0; i < 10; i++) {
			map.put(i, "id " + i);
		}
		
	}

}
